Shell 小结和实操记录(shell与Python交互使用) |
您所在的位置:网站首页 › shell脚本 ls-lh › Shell 小结和实操记录(shell与Python交互使用) |
文章目录
1. shell 脚本语言首行指定解释器:`#!/bin/bash`特殊字符的含义shell 控制流if 循环for 循环while 语句
2. 实操2.1 shell基本用法新建shell脚本文件:`vim test.sh`运行 shell:`./test.sh`传递参数
2.2 实际应用(Python和shell交互使用)2.2.1 shell 脚本运行Python文件:直接在shell脚本中写入 ./xxx.py2.2.2 命令行运行Python文件:python xxx.py2.2.3 命令行运行带参数的Python脚本:xxx.py arg1 arg2 ...2.2.4 shell脚本运行带参数的Python脚本:./xxx.py arg1 arg2 arg3 ...2.2.5 Python调用shell脚本
1. shell 脚本语言
首行指定解释器:#!/bin/bash
特殊字符的含义
小白一文快速的读懂shell(bash)脚本里面的符号
shell 控制流
if 循环
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
附: 1、如果else分支没有语句执行,就不要写这个else 2、末尾的fi就是if倒过来拼写,后面还会遇到类似的 写成一行(适用于终端命令提示符):if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi 例子: #!/bin/bash a=1 b=2 if [[ $1==a && $2==b ]] then echo 'This a test shell script.' else echo 'Please give some paras.' fi输出: This a test shell script. for 循环 for var in item1 item2 ... itemN do command1 command2 ... commandN done写成一行:for var in item1 item2 ... itemN; do command1; command2… done; 注:in列表是可选的,如果不用它,for循环使用命令行的位置参数,比如: for loop in 1 2 3 4 5 do echo "The value is: $loop" done输出: The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5 while 语句 while condition do command done 2. 实操 2.1 shell基本用法 新建shell脚本文件:vim test.sh注意,新建shell文件之后,需要: 赋予脚本执行权限:chmod +x ./test.sh首行需要指定编辑器:#!/bin/bash 运行 shell:./test.sh步骤:(注意shell脚本中第一行代码要指定编辑器) 在终端 cd 到相应目录 使.sh脚本具有执行权限:chmod +x ./test.sh 在终端执行脚本:./test.sh 注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。 附: chmod +x 的意思是(Linux下)将文件由普通文件(灰色)变为可执行文件(绿色); chmod -x 的含义相反! #!/bin/bash echo 'This a test shell script.'不传递 传递$0、$1和$2(即执行的文件名、第1个参数和第2个参数)
小结: 1、脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 2、其它 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 2.2 实际应用(Python和shell交互使用) 2.2.1 shell 脚本运行Python文件:直接在shell脚本中写入 ./xxx.py具体步骤: 保证python脚本文件中已经指定了解释器:#!/Users/robin/software/anaconda3/bin/python(根据自己的来——可以使用which python确定) 如果在linux系统上出现类似import: unable to open X server‘ @ error/import.c/ImportImageCommand/364.的报错,可以使用#!/usr/bin/env python3,`详细可以查看:在shell中执行Python脚本出错 使.py脚本具有执行权限: chmod +x python_test.py 运行脚本:./python_test.py 其实最后一步里,像在命令行上运行一样加上python也是可以的:python ./python_test.py 附代码: python_test.py #!/Users/robin/software/anaconda3/bin/python for i in range(4): print(i) print('This is a test for python script') test.sh #!/bin/bash ./python_test.py结果: 这个直接在命令行运行 pyhon xxx.py 即可! (先确保该Python脚本是可执行文件) 结果: 有几种方法可以实现:sys.argv 模块、argparse 模块和第三方的 click 模块等。 以下使用sys.argv 模块,执行系统为Mac OS。 #!/Users/robin/software/anaconda3/bin/python import sys def python_argument(): args = sys.argv n = 1 for i in args: print('The NO.{} arg is {}'.format(n,i)) n += 1 python_argument() print('Well done!')命令行执行及结果: 这个只需要 Python脚本内调用好sys.argv 等模块,使用上面的方法就可以了! 2.2.5 Python调用shell脚本有三种方法可以实现:os.system方法、os.popen方法和subprocess模块,这里主要讲os.system方法,更多可以参考:正确的使用python调用shell的姿势 感觉使用起来并没有多方便,暂时放弃! 主要参考: 菜鸟Shell 教程编写shell脚本运行python文件使用模块正确的使用python调用shell的姿势 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |